package com.test.practice.objectUtils.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateUtil {
	public static void main(String[] args) throws ParseException {
		
		System.out.println(getMonths(new Date(), getDate("2015-12-31")));
	}

	private static Date getDate(String date) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

		String rexp = "[0-9]{4}-[0-9]{2}";
		Pattern pattern = Pattern.compile(rexp);
		Matcher matcher = pattern.matcher(date);
		while (matcher.find()) {
			date = matcher.group();
			if (date != null) {
				break;
			}
		}
		return sdf.parse(date);
	}

	//计算出两个日期相差的月份
	private static int getMonths(Date date1, Date date2) {
		int iMonth = 0;
		int flag = 0;
		try {
			Calendar objCalendarDate1 = Calendar.getInstance();
			objCalendarDate1.setTime(date1);

			Calendar objCalendarDate2 = Calendar.getInstance();
			objCalendarDate2.setTime(date2);

			//如果两个时间相同返回0
			if (objCalendarDate2.equals(objCalendarDate1))
				return 0;
			//判断两个时间，始终将时间大的放在后面
			if (objCalendarDate1.after(objCalendarDate2)) {
				Calendar temp = objCalendarDate1;
				objCalendarDate1 = objCalendarDate2;
				objCalendarDate2 = temp;
			}
			//这里判断2个日期的在月份中的当前天的大小（这次我们不需要，因为取的是yyyy-MM，月份中的当前天都是1号，相同，所以永远不会进来）
			if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1.get(Calendar.DAY_OF_MONTH))
				flag = 1;

			//这里判断两个日期是否在同一年中
			if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1.get(Calendar.YEAR))
				//如果不在同一年中，先加（相差年数*12个月），对等到同一年然后比对月份差
				iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1.get(Calendar.YEAR)) * 12
						+ objCalendarDate2.get(Calendar.MONTH) - flag) - objCalendarDate1.get(Calendar.MONTH);
			else
				//如果在同一年中，直接比对月份差
				iMonth = objCalendarDate2.get(Calendar.MONTH) - objCalendarDate1.get(Calendar.MONTH) - flag;

		} catch (Exception e) {
			e.printStackTrace();
		}
		return iMonth;
	}
}
